﻿using System;
using Marmat.Foundation;
using Microsoft.Extensions.DependencyInjection;

namespace Marmat.FrameWork
{
    /// <summary>
    /// 重新登录的实现类。
    /// </summary>
    public class ReLogin : IReLogin
    {
        /// <summary>
        /// 执行
        /// </summary>
        public void Invoke()
        {
            // 获取现有的主窗体实例。
            var mainForm = SystemCommand.GetService<IMainForm>();
            var loadUserSettings = SystemCommand.GetServices<ILoadUserSetting>();
            foreach (var loadUserSetting in loadUserSettings)
            {
                // 如果用户配置实现了 IDisposable。则调用释放的函数。
                if (loadUserSetting is IDisposable disposable)
                    disposable.Dispose();
            }
            // 重新初始化服务提供者。
            System.IServiceProvider serviceProvider = ServiceCollectionFactory.BuildServiceProvider();
            ServiceCollectionFactory.SetServiceProvider(serviceProvider);
            //关闭主窗体。
            if (mainForm is System.Windows.Forms.Form frm)
            {
                frm.Dispose();
            }
            WinHostExtension.Login();
        }
    }
}
